#ifndef __EVENTFD_H__
#define __EVENTFD_H__

#include <functional>

using std::function;

class EventFd
{
    using EventFdCallback = function<void()>;
public:
    /* EventFd(const EventFdCallback &cb);//左值 */
    EventFd(EventFdCallback &&cb);//右值
    ~EventFd();

    //启动与停止
    //使用IO多路复用进行监听_evtfd
    void start();
    void stop();

    //创建用于通知的文件描述符
    int createEventFd();

    //封装read
    void handleRead();

    //封装write
    void wakeup();

private:
    int _evtfd;//用于通知的文件描述符
    EventFdCallback _cb;//被唤醒后执行的任务
    bool _isStarted;//标识启动与否的标志

};


#endif
